


#### 键盘事件 


用户在输入时，产生的事件发送到哪里了呢？

首先窗口管理器捕获事件， 然后将其转发给active应用，该应用程序转发该事件到关键窗口（keyWindow）,关键窗口再转发事件到active视图。

> 究竟哪个视图是active视图呢？
每一个窗口都有一个叫'firstResponse'的'Outlet'，指向那个窗口的某一个视图。那个窗口对视图来说就是'active'的 。 例如单击文本框时，文本框就是window的firstResponse

"NSView继承自NSResponder"
//如果处理键盘事件则返回YES
- (BOOL)acceptsFirstResponder
//询问接受者是否愿意放弃FirstResponder的地位
- (BOOL)resignFirstResponder
//通知接受者它已经成为window的responder了
- (BOOL)becomeFirstResponder
//按下一个键
- (void)keyDown:(NSEvent *)event{
//抬起一个键
- (void)keyUp:(NSEvent *)event
//按下或者放开修饰键
- (void)flagsChanged:(NSEvent *)event


"NSEvent"的常用键盘方法
    
    
    @property (nullable, readonly, copy) NSString *characters; //返回事件生成的字符
    @property (getter=isARepeat, readonly) BOOL ARepeat; //按住某键产生的重复时返回YES
    @property (readonly) unsigned short keyCode; //键盘上某键的编码
    @property (readonly) NSEventModifierFlags modifierFlags; //修饰键




















